লারাভেল (Laravel) ফ্রেমওয়ার্কে টেস্টিং (Testing) হল কোডের কার্যকারিতা যাচাই করার একটি গুরুত্বপূর্ণ প্রক্রিয়া। এর মাধ্যমে আপনি নিশ্চিত করতে পারেন যে, আপনার অ্যাপ্লিকেশনটি সঠিকভাবে কাজ করছে এবং কোনো বাগ বা ত্রুটি নেই। লারাভেল টেস্টিং টুলস এবং ফিচার সমৃদ্ধ, যা সহজেই ইউনিট টেস্ট, ফিচার টেস্ট এবং ইন্টিগ্রেশন টেস্ট করতে সাহায্য করে।
লারাভেল টেস্টিং একটি প্রক্রিয়া যা ব্যবহারকারীর ইনপুট বা বিভিন্ন পরিস্থিতিতে আপনার অ্যাপ্লিকেশন কিভাবে কাজ করবে তা পরীক্ষা করে। লারাভেল তার বিল্ট-ইন টেস্টিং টুলস ব্যবহার করে, যা PHPUnit এর ওপর ভিত্তি করে তৈরি, এবং এটি কোডের গুণগত মান নিশ্চিত করতে সহায়ক। এই টেস্টিং ফিচার ব্যবহার করে আপনি বিভিন্ন অংশের কোড স্বয়ংক্রিয়ভাবে পরীক্ষা করতে পারেন, যেমন ডাটাবেস অপারেশন, ইউআরএল রাউটিং, ফর্ম সাবমিশন ইত্যাদি।
লারাভেলে টেস্টিং ফাইলগুলো সাধারণত tests
ডিরেক্টরিতে থাকে। এখানে দুইটি প্রধান ফোল্ডার থাকে:
লারাভেল টেস্টিং চালানোর জন্য আপনি বিভিন্ন artisan
কমান্ড ব্যবহার করতে পারেন।
নতুন টেস্ট ফাইল তৈরি করতে php artisan make:test
কমান্ড ব্যবহার করা হয়। উদাহরণ:
php artisan make:test ExampleTest
এটি tests/Feature/ExampleTest.php
ফাইল তৈরি করবে। এই ফাইলে আপনার টেস্ট কোড লিখবেন।
সব টেস্ট একসাথে চালানোর জন্য php artisan test
কমান্ড ব্যবহার করুন:
php artisan test
এটি সমস্ত টেস্ট রান করবে এবং তাদের ফলাফল দেখাবে।
আপনি যদি কোনো নির্দিষ্ট টেস্ট চালাতে চান, তাহলে টেস্টের নাম দিয়ে কমান্ড রান করতে পারেন:
php artisan test --filter ExampleTest
এটি শুধুমাত্র ExampleTest
টেস্টটি রান করবে।
লারাভেল টেস্টিং অনেক শক্তিশালী ফিচার দিয়ে সজ্জিত। কিছু গুরুত্বপূর্ণ ফিচার নিচে আলোচনা করা হল:
ইউনিট টেস্ট হলো অ্যাপ্লিকেশনের ছোট ছোট ইউনিট (যেমন মডেল, ক্লাস, ফাংশন) পরীক্ষা করা। উদাহরণস্বরূপ, একটি সিম্পল ইউনিট টেস্ট:
// tests/Unit/ExampleTest.php
namespace Tests\Unit;
use PHPUnit\Framework\TestCase;
class ExampleTest extends TestCase
{
public function testBasicTest()
{
$this->assertTrue(true);
}
}
এটি একটি সাধারণ ইউনিট টেস্ট যা সবসময় true
রিটার্ন করবে।
ফিচার টেস্টগুলি অ্যাপ্লিকেশনের বৃহত্তর অংশ পরীক্ষা করতে ব্যবহৃত হয়, যেমন ইউজার ইন্টারঅ্যাকশন, API রেসপন্স, ফর্ম সাবমিশন ইত্যাদি। একটি সাধারণ ফিচার টেস্ট উদাহরণ:
// tests/Feature/ExampleTest.php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class ExampleTest extends TestCase
{
use RefreshDatabase;
public function testBasicTest()
{
$response = $this->get('/');
$response->assertStatus(200);
}
}
এটি /
রুটে GET রিকোয়েস্ট পাঠায় এবং তার রেসপন্স স্ট্যাটাস কোড ২০০ (OK) কিনা পরীক্ষা করে।
লারাভেল টেস্টিং ডাটাবেস টেস্টিংকেও সমর্থন করে। আপনি মাইগ্রেশন রান করে টেস্ট ডাটাবেসে ডেটা ইনসার্ট করে তা পরীক্ষা করতে পারেন। উদাহরণ:
public function testDatabase()
{
$this->assertDatabaseHas('users', [
'email' => 'user@example.com',
]);
}
এটি পরীক্ষা করবে যে, users
টেবিলের মধ্যে user@example.com
ইমেইলটি আছে কিনা।
লারাভেল ফর্ম সাবমিশন টেস্টিং সমর্থন করে, যেখানে আপনি ফর্ম ডেটা পুশ করে তার রেসপন্স পরীক্ষা করতে পারেন:
public function testFormSubmission()
{
$response = $this->post('/form', [
'name' => 'John Doe',
'email' => 'johndoe@example.com',
]);
$response->assertStatus(302); // Redirection
$response->assertSessionHas('success', 'Form submitted successfully!');
}
এটি ফর্ম সাবমিশনের পর সঠিক রিডিরেকশন এবং সেশন ভেরিয়েবল পরীক্ষা করবে।
লারাভেল টেস্টিংে মকিং (Mocking) এবং স্পাইিং (Spying) এর মাধ্যমে আপনি নির্দিষ্ট ক্লাস বা মেথডকে পরীক্ষা করতে পারেন। যেমন:
use App\Models\User;
use Illuminate\Support\Facades\Hash;
public function testMocking()
{
$user = User::factory()->make();
$this->mock(Hash::class, function ($mock) use ($user) {
$mock->shouldReceive('check')
->once()
->with($user->password)
->andReturn(true);
});
}
এটি Hash::check
মেথডটিকে মক করবে এবং পরীক্ষার সময় তা নিশ্চিত করবে।
লারাভেল টেস্টিং একটি অত্যন্ত গুরুত্বপূর্ণ টুল যা ডেভেলপারদের তাদের কোডের গুণগত মান নিশ্চিত করতে সাহায্য করে। ইউনিট টেস্ট, ফিচার টেস্ট, ডাটাবেস টেস্ট, ফর্ম সাবমিশন টেস্ট এবং মকিং/স্পাইিং-এর মাধ্যমে আপনি অ্যাপ্লিকেশনটি সম্পূর্ণভাবে পরীক্ষা করতে পারবেন এবং কোনো ত্রুটি বা বাগ থাকলে তা শোধরাতে পারবেন। লারাভেলের শক্তিশালী টেস্টিং টুলস এবং ফিচারের সাহায্যে আপনি আপনার অ্যাপ্লিকেশনকে আরও স্থিতিশীল এবং নির্ভরযোগ্য করতে পারবেন।
লারাভেল (Laravel) একটি শক্তিশালী PHP ফ্রেমওয়ার্ক যা ডেভেলপারদের দ্রুত এবং কার্যকরী অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে। লারাভেলে টেস্টিং একটি গুরুত্বপূর্ণ অংশ, যা অ্যাপ্লিকেশনটি কার্যকরী ও ত্রুটিমুক্ত রাখা নিশ্চিত করতে সাহায্য করে। লারাভেল টেস্টিং প্রক্রিয়ায় বিভিন্ন ধরনের টেস্টিং কৌশল এবং টুলস রয়েছে যা অ্যাপ্লিকেশন ডেভেলপমেন্টের গুণগত মান উন্নত করতে সহায়ক। এই টিউটোরিয়ালে আমরা লারাভেল টেস্টিংয়ের প্রাথমিক ধারণা এবং এর মৌলিক ফিচারগুলো নিয়ে আলোচনা করব।
লারাভেল টেস্টিং হল অ্যাপ্লিকেশন কোডের কার্যকারিতা পরীক্ষা করার একটি প্রক্রিয়া। এর মাধ্যমে আপনি নিশ্চিত করতে পারেন যে, আপনার কোড প্রত্যাশিতভাবে কাজ করছে কিনা। লারাভেলে টেস্টিং করার জন্য বিভিন্ন ধরনের টেস্টিং পদ্ধতি এবং টুলস রয়েছে, যেমন ইউনিট টেস্ট (Unit Test), ফিচার টেস্ট (Feature Test), এক্সপ্লোরেটরি টেস্ট (Exploratory Test) ইত্যাদি।
লারাভেলে টেস্টিং করার জন্য PHPUnit ব্যবহৃত হয়, যা একটি জনপ্রিয় ইউনিট টেস্টিং ফ্রেমওয়ার্ক। লারাভেল ইতোমধ্যে PHPUnit অন্তর্ভুক্ত করেছে এবং এটি লারাভেলের টেস্টিং টুল হিসেবে ব্যবহৃত হয়।
লারাভেলে টেস্টিং শুরু করতে আপনাকে প্রথমে একটি টেস্ট ক্লাস তৈরি করতে হবে। এর জন্য php artisan make:test
কমান্ড ব্যবহার করা হয়। উদাহরণস্বরূপ, যদি আপনি একটি UserTest
তৈরি করতে চান, তাহলে নিচের কমান্ডটি ব্যবহার করবেন:
php artisan make:test UserTest
এটি tests/Feature
অথবা tests/Unit
ডিরেক্টরিতে একটি নতুন টেস্ট ক্লাস তৈরি করবে।
টেস্ট ক্লাসে সাধারণত দুটি মেথড থাকে:
setUp()
: এই মেথডটি টেস্ট শুরুর আগে একবার চালানো হয়, এবং এখানে আপনি কিছু প্রাথমিক কনফিগারেশন বা ডাটাবেইস প্রস্তুত করতে পারেন।tearDown()
: এই মেথডটি টেস্ট শেষ হওয়ার পরে একবার চালানো হয়, এবং এটি ক্লিনআপ (clean-up) করতে ব্যবহৃত হয়।<?php
namespace Tests\Feature;
use Tests\TestCase;
class UserTest extends TestCase
{
public function test_example()
{
$response = $this->get('/'); // এখানে একটি GET রিকোয়েস্ট করা হচ্ছে
$response->assertStatus(200); // রেসপন্স স্ট্যাটাস 200 হওয়া উচিত
}
}
একবার টেস্ট ক্লাস তৈরি হলে, আপনি PHPUnit ব্যবহার করে টেস্ট চালাতে পারবেন। এর জন্য নিচের কমান্ডটি ব্যবহার করুন:
php artisan test
এটি সব টেস্ট চালাবে এবং রেজাল্ট শো করবে। আপনি নির্দিষ্ট টেস্ট চালাতে চাইলে টেস্ট ক্লাস বা মেথডের নামও উল্লেখ করতে পারেন:
php artisan test --filter UserTest
ইউনিট টেস্ট হলো কোডের ছোট ছোট অংশ (যেমন একটি মেথড বা ফাংশন) টেস্ট করার পদ্ধতি। এটি একটি নির্দিষ্ট ফাংশন বা মেথডের কার্যকারিতা পরীক্ষা করে।
public function test_user_creation()
{
$user = User::create(['name' => 'John Doe', 'email' => 'john@example.com']);
$this->assertEquals('John Doe', $user->name);
}
ফিচার টেস্ট বৃহত্তর ফিচার বা প্রক্রিয়া পরীক্ষা করার জন্য ব্যবহৃত হয়। এটি অনেকগুলো মেথড বা ফাংশনের সংমিশ্রণ হতে পারে, যেমন রাউটিং, ভ্যালিডেশন, বা সম্পূর্ণ API কল।
public function test_homepage_status()
{
$response = $this->get('/');
$response->assertStatus(200); // রেসপন্স স্ট্যাটাস 200 হওয়া উচিত
}
ইনটিগ্রেশন টেস্ট বিভিন্ন মডিউল বা সিস্টেমের মধ্যে সংযোগ পরীক্ষা করার জন্য ব্যবহৃত হয়, যেমন API কল বা ডাটাবেইসের সাথে ইন্টারঅ্যাকশন।
assertEquals()
: দুটি মানের সমতা পরীক্ষা করে।assertDatabaseHas()
: ডাটাবেইজে একটি রেকর্ড আছে কিনা তা পরীক্ষা করে।assertRedirect()
: রিডিরেক্ট স্টেটাস পরীক্ষা করে।লারাভেল টেস্টিং প্রক্রিয়া আপনার অ্যাপ্লিকেশনকে আরও স্থিতিশীল, স্কেলেবল এবং ত্রুটিমুক্ত রাখে। এটি ডেভেলপারদের কোডের গুণগত মান উন্নত করতে সাহায্য করে এবং কোন ধরনের পরিবর্তন কোডের কার্যকারিতা বা পারফরম্যান্সে সমস্যা তৈরি করছে কিনা তা দ্রুত জানতে সহায়তা করে।
লারাভেল (Laravel) একটি শক্তিশালী PHP ফ্রেমওয়ার্ক যা ডেভেলপারদের অ্যাপ্লিকেশনটিকে উন্নত এবং সুরক্ষিত করতে সহায়তা করে। এর মধ্যে একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল HTTP টেস্টিং (HTTP Testing), যা ডেভেলপারদের বিভিন্ন HTTP রিকোয়েস্টের জন্য টেস্ট তৈরি করতে সক্ষম করে। এটি অ্যাপ্লিকেশনের বিভিন্ন রাউট, কন্ট্রোলার, ভিউ এবং API পরীক্ষা করার জন্য ব্যবহৃত হয়।
HTTP টেস্টিং হল একটি পদ্ধতি যার মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনটির HTTP রিকোয়েস্ট এবং রেসপন্সের আচরণ পরীক্ষা করতে পারেন। লারাভেল এই ফিচারটি Laravel PHPUnit
টেস্টিং ফ্রেমওয়ার্কে অন্তর্ভুক্ত করেছে, যাতে সহজে অ্যাপ্লিকেশনটির বিভিন্ন রিকোয়েস্ট পরীক্ষা করা যায়। আপনি রাউট, কন্ট্রোলার, সেশন, কুকি, ভিউ, এবং API টেস্ট করতে পারেন।
লারাভেল HTTP টেস্টিং খুবই সহজ এবং Laravel's HTTP Test
ফিচারের মাধ্যমে সহজেই API রিকোয়েস্ট বা ওয়েব রিকোয়েস্টের জন্য টেস্ট তৈরি করা যায়। এটি TestCase
ক্লাসের মাধ্যমে করা হয়, যা PHPUnit ফ্রেমওয়ার্কের সাথে সংযুক্ত থাকে। আপনাকে প্রথমে একটি টেস্ট ক্লাস তৈরি করতে হবে, তারপর আপনি বিভিন্ন HTTP রিকোয়েস্ট (যেমন GET, POST, PUT, DELETE) এর জন্য টেস্ট তৈরি করবেন।
লারাভেলে টেস্ট ক্লাস তৈরি করতে php artisan make:test
কমান্ড ব্যবহার করা হয়। উদাহরণস্বরূপ, যদি আপনি একটি PostTest
নামে টেস্ট তৈরি করতে চান:
php artisan make:test PostTest
এটি tests/Feature
ডিরেক্টরিতে PostTest.php
ফাইল তৈরি করবে, যেখানে আপনি HTTP রিকোয়েস্টের জন্য টেস্ট লিখতে পারবেন।
লারাভেলে বিভিন্ন HTTP রিকোয়েস্টের জন্য টেস্ট করতে $this->get()
, $this->post()
, $this->put()
, এবং $this->delete()
মেথড ব্যবহার করা হয়। এগুলি HTTP রিকোয়েস্ট তৈরি করে এবং তাদের জন্য রেসপন্স পরীক্ষার সুযোগ দেয়।
GET রিকোয়েস্ট টেস্ট করা:
public function testPostPageLoadsCorrectly()
{
$response = $this->get('/posts');
$response->assertStatus(200); // রেসপন্স স্ট্যাটাস কোড 200 হতে হবে
$response->assertSee('Posts'); // পেজে 'Posts' টেক্সট দেখতে হবে
}
এখানে, get('/posts')
একটি GET রিকোয়েস্ট পাঠাচ্ছে এবং তার রেসপন্সের স্ট্যাটাস কোড এবং কন্টেন্ট পরীক্ষা করছে।
POST রিকোয়েস্ট টেস্ট করা:
public function testCreatePost()
{
$response = $this->post('/posts', [
'title' => 'New Post',
'content' => 'This is the content of the new post.'
]);
$response->assertStatus(201); // রেসপন্স স্ট্যাটাস কোড 201 (Created) হতে হবে
$response->assertJson([
'title' => 'New Post',
'content' => 'This is the content of the new post.'
]); // রেসপন্স JSON কন্টেন্টে সঠিক ডেটা থাকতে হবে
}
এখানে, post('/posts')
একটি POST রিকোয়েস্ট পাঠাচ্ছে এবং পোস্ট করা ডেটার উপর ভিত্তি করে রেসপন্স পরীক্ষা করছে।
public function testLoginRedirectsToHomePage()
{
$response = $this->post('/login', [
'email' => 'user@example.com',
'password' => 'password'
]);
$response->assertRedirect('/home');
$response->assertSessionHas('user_id'); // সেশনে 'user_id' ডেটা থাকতে হবে
}
এখানে, আপনি POST রিকোয়েস্ট পাঠাচ্ছেন এবং সেশন ডেটা যাচাই করছেন।
লারাভেল API টেস্টিং করার জন্য assertJson()
মেথডের মাধ্যমে API রেসপন্সের JSON ডেটা পরীক্ষা করা যেতে পারে। উদাহরণ:
public function testApiReturnsPostData()
{
$response = $this->json('GET', '/api/posts');
$response->assertStatus(200); // রেসপন্স স্ট্যাটাস কোড 200
$response->assertJsonStructure([
'*' => ['id', 'title', 'content']
]); // JSON রেসপন্সে 'id', 'title', 'content' ফিল্ড থাকতে হবে
}
এখানে, json('GET', '/api/posts')
একটি GET রিকোয়েস্ট পাঠাচ্ছে এবং JSON ডেটার কাঠামো পরীক্ষা করছে।
লারাভেল HTTP টেস্টিং ফিচারটি ডেভেলপারদের অ্যাপ্লিকেশনের কার্যকারিতা, নিরাপত্তা এবং রিলায়েবিলিটি নিশ্চিত করতে সাহায্য করে। এটি টেস্টিং প্রক্রিয়াকে অটোমেটেড এবং কার্যকরী করে তোলে, যা অ্যাপ্লিকেশন ডেভেলপমেন্টের সময় অনেক সুবিধা প্রদান করে।
লারাভেল (Laravel) ফ্রেমওয়ার্কে কনসোল টেস্টিং (Console Testing) একটি গুরুত্বপূর্ণ ফিচার যা আপনাকে অ্যাপ্লিকেশনটির কনসোল কমান্ডের কার্যকারিতা পরীক্ষা করতে সহায়তা করে। লারাভেল কনসোল টেস্টিং এর মাধ্যমে আপনি Artisan
কমান্ডগুলো টেস্ট করতে পারেন, যা অ্যাপ্লিকেশনের বিভিন্ন কাজ যেমন মাইগ্রেশন, সিডিং, কাস্টম কমান্ড ইত্যাদি পরিচালনা করে।
কনসোল টেস্টিং হল এমন একটি প্রক্রিয়া যার মাধ্যমে আপনি লারাভেল অ্যাপ্লিকেশনের কনসোল কমান্ডগুলোর কার্যকারিতা পরীক্ষা করেন। কনসোল কমান্ডগুলি সাধারণত ব্যাকএন্ড কাজের জন্য ব্যবহৃত হয়, যেমন ডাটাবেস মাইগ্রেশন, সিডিং, কাস্টম কমান্ড ইত্যাদি। লারাভেল কনসোল টেস্টিং আপনাকে এই কমান্ডগুলোর সঠিক কার্যকারিতা নিশ্চিত করার জন্য অটোমেটেড টেস্টিং সরবরাহ করে।
লারাভেল কনসোল কমান্ড টেস্ট করতে আপনাকে Illuminate\Console\Command
ক্লাসের বিভিন্ন ফিচার ব্যবহার করতে হবে। এর মধ্যে Artisan::call()
মেথডটি কমান্ড কল করার জন্য ব্যবহার করা হয়, এবং আপনি টেস্ট কোডের মাধ্যমে কমান্ডের আউটপুট এবং আর্গুমেন্ট চেক করতে পারেন।
টেস্ট করার জন্য আপনাকে প্রথমে একটি নতুন টেস্ট ক্লাস তৈরি করতে হবে। উদাহরণস্বরূপ, একটি কনসোল কমান্ড টেস্ট করতে:
php artisan make:test Console/SomeCommandTest
এটি tests/Feature/Console/SomeCommandTest.php
ফাইল তৈরি করবে। এরপর, আপনি এখানে কনসোল কমান্ডের টেস্ট লিখতে পারবেন।
ধরা যাক, আপনার অ্যাপ্লিকেশনে একটি কাস্টম SendEmails
নামক Artisan কমান্ড রয়েছে, যা সব ব্যবহারকারীর কাছে ইমেইল পাঠানোর জন্য তৈরি হয়েছে। এর টেস্ট কোড হতে পারে এমন:
namespace Tests\Feature\Console;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Artisan;
use Tests\TestCase;
class SendEmailsTest extends TestCase
{
use RefreshDatabase;
/** @test */
public function it_sends_emails()
{
// Arrange: প্রয়োজনীয় সেটআপ
$this->artisan('send:emails') // Artisan কমান্ড কল করা
->assertExitCode(0); // সফলভাবে এক্সিট কোড 0 হওয়া উচিত
// Assert: চেক করুন যে ইমেইল পাঠানো হয়েছে কি না
$this->assertDatabaseHas('emails', [
'status' => 'sent',
]);
}
}
এখানে:
artisan('send:emails')
হলো কনসোল কমান্ড কল করা।assertExitCode(0)
এটি নিশ্চিত করে যে কমান্ডটি সফলভাবে রান হয়েছে।assertDatabaseHas()
ব্যবহার করে আমরা নিশ্চিত হচ্ছি যে ইমেইল সফলভাবে ডাটাবেসে সেভ হয়েছে।আপনি যদি কনসোল কমান্ডে আর্গুমেন্ট পাস করতে চান, তাহলে artisan()
মেথডে আর্গুমেন্ট পাস করতে পারেন। উদাহরণস্বরূপ:
public function test_it_sends_email_to_specific_user()
{
$userId = 1;
$this->artisan('send:emails', ['user' => $userId])
->assertExitCode(0);
$this->assertDatabaseHas('emails', [
'user_id' => $userId,
'status' => 'sent',
]);
}
এখানে send:emails
কমান্ডের user
আর্গুমেন্ট পাস করা হয়েছে, যা নিশ্চিত করে যে নির্দিষ্ট ব্যবহারকারীকে ইমেইল পাঠানো হয়েছে।
লেভেল কনসোল টেস্টিংয়ের মাধ্যমে আপনি কনসোল কমান্ডের আউটপুটও পরীক্ষা করতে পারেন। Artisan::output()
মেথড ব্যবহার করে আপনি আউটপুটটি ধরতে পারবেন:
public function test_command_output()
{
$this->artisan('send:emails')
->expectsOutput('Emails have been sent successfully!');
}
এটি নিশ্চিত করে যে কমান্ডটি নির্দিষ্ট আউটপুটটি রিটার্ন করেছে।
লারাভেল কনসোল টেস্টিং আপনাকে অ্যাপ্লিকেশনের কনসোল কমান্ডগুলো সহজেই টেস্ট করার সুযোগ দেয়, যা অ্যাপ্লিকেশনের ব্যাকএন্ড কার্যকারিতা নিশ্চিত করতে সাহায্য করে। আপনি artisan::call()
ব্যবহার করে কমান্ড চালাতে পারেন এবং assertExitCode()
, assertDatabaseHas()
, expectsOutput()
ইত্যাদি ফাংশন ব্যবহার করে কনসোল কমান্ডের সঠিক কার্যকারিতা পরীক্ষা করতে পারেন। এটি আপনার ডেভেলপমেন্ট প্রক্রিয়াকে আরো নির্ভরযোগ্য এবং কার্যকর করে তোলে।
লারাভেল (Laravel) ফ্রেমওয়ার্কের একটি শক্তিশালী ফিচার হল ব্রাউজার টেস্টিং (Browser Testing), যা ব্যবহারকারীর ইন্টারফেস (UI) এবং ব্রাউজার ইন্টারঅ্যাকশনের কার্যকারিতা পরীক্ষা করতে সহায়তা করে। লারাভেল ব্রাউজার টেস্টে, আপনি গুগল ক্রোমের মতো ব্রাউজারে স্বয়ংক্রিয়ভাবে পরীক্ষা চালাতে পারেন এবং নিশ্চিত করতে পারেন যে আপনার অ্যাপ্লিকেশনের ইউজার ইন্টারফেস সঠিকভাবে কাজ করছে।
ব্রাউজার টেস্টিং (Browser Testing) হল একটি পদ্ধতি যেখানে আপনি আপনার ওয়েব অ্যাপ্লিকেশনের ফ্রন্ট-এন্ড ইউজার ইন্টারফেসের কার্যকারিতা পরীক্ষা করেন। এটি আপনার অ্যাপ্লিকেশনের বিভিন্ন ব্রাউজারে বিভিন্ন পরিস্থিতিতে কিভাবে কাজ করবে তা নিশ্চিত করতে সহায়তা করে। ব্রাউজার টেস্টে, আপনি কেবল ডেটা পদ্ধতি বা ব্যাকএন্ড API নয়, বরং ইউজার ইন্টারফেস এবং ইউজার ইন্টারঅ্যাকশন পরীক্ষা করেন।
লারাভেল ব্রাউজার টেস্টিং করার জন্য কিছু টুলস প্রয়োজন হয়। এগুলোর মধ্যে অন্যতম হল:
প্রথমে, আপনাকে Laravel Dusk প্যাকেজটি ইনস্টল করতে হবে। এটি ইনস্টল করার জন্য Composer ব্যবহার করা হয়:
composer require --dev laravel/dusk
Laravel Dusk ইনস্টল করার পর, আপনাকে কিছু কনফিগারেশন করতে হবে। প্রথমে, DuskTestCase
ক্লাসটি চালু করতে হবে:
php artisan dusk:install
এটি .env.dusk.local
ফাইল এবং tests/DuskTestCase.php
ফাইল তৈরি করবে।
এখন আপনি নতুন একটি ব্রাউজার টেস্ট তৈরি করতে পারেন। উদাহরণস্বরূপ:
php artisan dusk:make ExampleTest
এটি tests/Browser/ExampleTest.php
ফাইল তৈরি করবে, যেখানে আপনি আপনার ব্রাউজার টেস্ট কোড লিখতে পারবেন।
আপনি ExampleTest.php
ফাইলে বিভিন্ন ব্রাউজার টেস্ট যোগ করতে পারেন। উদাহরণ:
namespace Tests\Browser;
use Tests\DuskTestCase;
use Laravel\Dusk\Browser;
use Illuminate\Foundation\Testing\DatabaseMigrations;
class ExampleTest extends DuskTestCase
{
use DatabaseMigrations;
/** @test */
public function a_user_can_visit_the_homepage()
{
$this->browse(function (Browser $browser) {
$browser->visit('/')
->assertSee('Welcome');
});
}
}
এই টেস্টটি আপনার অ্যাপ্লিকেশনের হোমপেজে গিয়ে সেখানে "Welcome" শব্দটি দেখা যাচ্ছে কিনা পরীক্ষা করবে।
এখন আপনি ব্রাউজার টেস্টটি চালাতে পারেন:
php artisan dusk
এই কমান্ডটি টেস্ট চালাবে এবং ব্রাউজার অটোমেশন পরীক্ষা করবে। Dusk ব্যাকএন্ডে একটি ক্রোম ব্রাউজার চালু করে এবং আপনাকে স্বয়ংক্রিয়ভাবে টেস্টটি সম্পন্ন করতে সাহায্য করবে।
আপনি টেস্টের সময় ব্রাউজারে উপাদানগুলোর ওপর ক্লিক করতে পারেন:
$browser->click('@login-button');
এখানে @login-button
হল CSS সিলেক্টর।
টেস্টের সময় আপনি ইনপুট ফিল্ডে ডেটা টাইপ করতে পারেন:
$browser->type('email', 'user@example.com');
টেস্টের সময় পেজ রিডিরেকশন পরীক্ষা করতে পারেন:
$browser->visit('/login')
->type('email', 'user@example.com')
->type('password', 'secret')
->press('Login')
->assertPathIs('/dashboard');
এটি পরীক্ষা করবে যে, লগিন করার পর ব্যবহারকারী dashboard
পৃষ্ঠায় রিডিরেক্ট হয়েছে কিনা।
$browser->assertSee('Dashboard');
এটি নিশ্চিত করবে যে, পেজে "Dashboard" শব্দটি রয়েছে।
লারাভেল ব্রাউজার টেস্টিং (Laravel Browser Test) একটি গুরুত্বপূর্ণ ফিচার যা আপনার অ্যাপ্লিকেশনের ইউজার ইন্টারফেস এবং ব্রাউজার ইন্টারঅ্যাকশন পরীক্ষা করার জন্য ব্যবহৃত হয়। Laravel Dusk ব্যবহার করে আপনি অটোমেটেড টেস্টিং করতে পারেন, যা আপনাকে UI ত্রুটিগুলি সহজে শনাক্ত করতে সাহায্য করে এবং উন্নত ডেভেলপমেন্ট প্রক্রিয়া নিশ্চিত করে।
লারাভেল (Laravel) একটি অত্যন্ত শক্তিশালী PHP ফ্রেমওয়ার্ক যা ডেভেলপারদের টেস্টিং এর জন্য বিস্তৃত টুলস সরবরাহ করে। এর মধ্যে ডাটাবেইজ টেস্টিং (Database Testing) একটি গুরুত্বপূর্ণ বৈশিষ্ট্য। ডাটাবেইজ টেস্টিং ব্যবহার করে আপনি নিশ্চিত করতে পারেন যে আপনার ডাটাবেইজের ক্রিয়াকলাপ (যেমন, ইনসার্ট, আপডেট, ডিলিট) সঠিকভাবে কাজ করছে কিনা। লারাভেল আপনাকে সহজে ডাটাবেইজ টেস্ট তৈরি করার সুবিধা দেয়।
ডাটাবেইজ টেস্টিং হল একটি প্রক্রিয়া যার মাধ্যমে আপনি নিশ্চিত করেন যে আপনার অ্যাপ্লিকেশন ডাটাবেইজের সাথে সঠিকভাবে ইন্টারঅ্যাক্ট করছে। এটি নিশ্চিত করতে সাহায্য করে যে ডাটাবেইজ থেকে রেকর্ড সঠিকভাবে রিট্রিভ, ইনসার্ট, আপডেট বা ডিলিট হচ্ছে। লারাভেল ইন-বিল্ট ফিচার সরবরাহ করে যেমন, ডাটাবেইজ ফ্যাকটরি, ট্রানজেকশন এবং ইন-মেমরি ডাটাবেইজ ব্যবহার করে, যা ডাটাবেইজ টেস্টিংকে আরো সহজ ও কার্যকরী করে তোলে।
লারাভেলে ডাটাবেইজ টেস্টিং করার জন্য প্রথমেই আপনাকে phpunit
কনফিগারেশন ফাইল ও TestCase
ক্লাস ব্যবহার করতে হবে। লারাভেল tests
ডিরেক্টরিতে টেস্ট ফাইলগুলো রাখে এবং phpunit.xml
ফাইলটি টেস্টিং কনফিগারেশনের জন্য ব্যবহৃত হয়।
লারাভেল ডাটাবেইজ টেস্ট তৈরি করতে, আপনি সাধারণত artisan make:test
কমান্ড ব্যবহার করেন:
php artisan make:test PostTest
এটি tests/Feature/PostTest.php
ফাইল তৈরি করবে, যেখানে আপনি ডাটাবেইজ সম্পর্কিত টেস্ট লিখতে পারবেন।
ডাটাবেইজ টেস্টিংয়ের জন্য লারাভেল দুটি গুরুত্বপূর্ণ কনফিগারেশন সরবরাহ করে:
লারাভেল ডাটাবেইজ ফ্যাকটরি ব্যবহার করে সহজেই ডামি ডেটা তৈরি করতে পারেন, যা টেস্টিংয়ের জন্য ব্যবহার করা যাবে। একটি ফ্যাকটরি তৈরি করতে:
php artisan make:factory PostFactory --model=Post
এটি একটি PostFactory
তৈরি করবে, যেখানে আপনি Post
মডেলের জন্য ডামি ডেটা তৈরির লজিক লিখবেন। উদাহরণ:
// database/factories/PostFactory.php
use Faker\Generator as Faker;
$factory->define(App\Models\Post::class, function (Faker $faker) {
return [
'title' => $faker->sentence,
'content' => $faker->paragraph,
];
});
এখন, আপনি এই ফ্যাকটরি ব্যবহার করে ডামি ডেটা তৈরি করতে পারেন।
টেস্ট ফাইলে আপনি ডাটাবেইজ টেস্ট করতে DB
ফ্যাসেড বা মডেল ব্যবহার করতে পারেন। উদাহরণ:
use App\Models\Post;
use Illuminate\Foundation\Testing\RefreshDatabase;
class PostTest extends TestCase
{
use RefreshDatabase;
public function test_create_post()
{
$post = Post::factory()->create([
'title' => 'Test Post Title',
'content' => 'This is a test post content.',
]);
$this->assertDatabaseHas('posts', [
'title' => 'Test Post Title',
'content' => 'This is a test post content.',
]);
}
public function test_update_post()
{
$post = Post::factory()->create();
$post->update(['title' => 'Updated Post Title']);
$this->assertDatabaseHas('posts', [
'title' => 'Updated Post Title',
]);
}
public function test_delete_post()
{
$post = Post::factory()->create();
$post->delete();
$this->assertDeleted($post);
}
}
এখানে:
test_create_post()
মেথডটি Post
মডেলের একটি রেকর্ড তৈরি করে এবং নিশ্চিত করে যে ডাটাবেইজে তা সঠিকভাবে সংরক্ষিত হয়েছে।test_update_post()
মেথডটি Post
মডেলের একটি রেকর্ড আপডেট করে এবং নিশ্চিত করে যে আপডেটেড ডেটা ডাটাবেইজে রয়েছে।test_delete_post()
মেথডটি একটি পোস্ট ডিলিট করে এবং নিশ্চিত করে যে ডিলিট হওয়া রেকর্ড ডাটাবেইজ থেকে সরানো হয়েছে।টেস্টিং চলাকালে ডাটাবেইজে কোনো পরিবর্তন করতে চান না, তবে ট্রানজেকশন ব্যবহার করতে পারেন, যা টেস্ট শেষে সব পরিবর্তন রিভার্স বা রোলব্যাক করে দিবে।
use Illuminate\Support\Facades\DB;
class PostTest extends TestCase
{
public function test_transaction()
{
DB::beginTransaction();
$post = Post::factory()->create();
// আপনার টেস্ট লজিক
DB::rollBack(); // রোলব্যাক করলে, ডাটাবেইজে কোনো পরিবর্তন হবে না
}
}
লারাভেলে ডাটাবেইজ টেস্ট করার জন্য আপনাকে .env.testing
ফাইল ব্যবহার করতে হবে, যাতে আপনি টেস্টের সময় আলাদা ডাটাবেইজ ব্যবহার করতে পারেন। যেমন:
DB_CONNECTION=mysql
DB_DATABASE=test_database
DB_USERNAME=root
DB_PASSWORD=
টেস্ট চালানোর জন্য, php artisan test
অথবা ./vendor/bin/phpunit
কমান্ড ব্যবহার করতে পারেন। এটি সমস্ত টেস্ট রান করবে এবং ডাটাবেইজ সম্পর্কিত টেস্টের ফলাফল দেখাবে।
লারাভেল ডাটাবেইজ টেস্টিং ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনের ডাটাবেইজের কার্যকারিতা নিশ্চিত করতে পারেন। ডাটাবেইজ ফ্যাকটরি, ট্রানজেকশন এবং সহজ টেস্টিং মেথডের মাধ্যমে আপনি ডেটা ইনসার্ট, আপডেট এবং ডিলিটের মতো কার্যকলাপ সহজেই পরীক্ষা করতে পারেন। এইভাবে, ডাটাবেইজ টেস্টিং ডেভেলপারদের অ্যাপ্লিকেশনটি আরও সঠিক এবং নির্ভুলভাবে তৈরি করতে সহায়তা করে।
লারাভেল (Laravel) একটি শক্তিশালী PHP ফ্রেমওয়ার্ক যা ডেভেলপারদের অ্যাপ্লিকেশন টেস্টিং করার জন্য উন্নত টুলস এবং ফিচার সরবরাহ করে। এর মধ্যে একটি গুরুত্বপূর্ণ টেস্টিং টেকনিক হল মকিং (Mocking)। মকিং হলো একটি টেস্টিং কৌশল যেখানে আপনি নির্দিষ্ট ডিপেনডেন্সি বা ক্লাসের আসল কার্যকলাপের পরিবর্তে একটি মক অবজেক্ট বা মক ফাংশন ব্যবহার করেন। এটি মূলত টেস্টিংকে আরও নির্দিষ্ট এবং দ্রুত করার জন্য ব্যবহৃত হয়, যেখানে আসল ডিপেনডেন্সি বা সিস্টেমের প্রভাব এড়ানো হয়।
মকিং (Mocking) একটি টেস্টিং কৌশল যা ব্যবহার করে আপনি একটি মক অবজেক্ট তৈরি করেন যা একটি আসল অবজেক্টের আচরণ নকল করে। এটি সাহায্য করে যখন আপনি কোনো বিশেষ ফাংশন বা ক্লাসের আচরণ পরীক্ষা করতে চান, কিন্তু সেই ফাংশন বা ক্লাসের আসল কার্যকারিতা চালাতে চান না। এর ফলে টেস্টিং আরো দ্রুত হয় এবং নির্দিষ্ট অংশগুলোর উপর মনোযোগ দিতে সহজ হয়।
লারাভেল মকিংয়ের জন্য Mockery
প্যাকেজ ব্যবহার করে থাকে, যা লারাভেলের টেস্টিং ফিচারের সাথে একত্রে কাজ করে। লারাভেল ডিফল্টভাবে Mockery
ইন্টিগ্রেটেডভাবে প্রদান করে, যাতে আপনি সহজেই মক অবজেক্ট তৈরি এবং ব্যবহার করতে পারেন।
লাটাভেলে মকিং ব্যবহার করার জন্য Mockery
ক্লাসের mock()
মেথড ব্যবহার করা হয়। এখানে কিছু উদাহরণ দেওয়া হলো:
ধরা যাক, আপনার একটি UserService
ক্লাস রয়েছে যেটি একটি UserRepository
ক্লাসের উপর নির্ভরশীল। আপনি চাইলে UserRepository
ক্লাসটি মক করে টেস্ট করতে পারেন, যাতে আসল ডাটাবেস কনফিগারেশন বা ডেটা প্রয়োজন না হয়।
use Mockery;
use App\Services\UserService;
use App\Repositories\UserRepository;
public function testUserService()
{
// মক অবজেক্ট তৈরি
$mockRepository = Mockery::mock(UserRepository::class);
// মক অবজেক্টে প্রত্যাশিত আচরণ নির্ধারণ
$mockRepository->shouldReceive('getUser')->with(1)->andReturn('John Doe');
// সার্ভিস ক্লাসে মক অবজেক্ট ইনজেক্ট করা
$service = new UserService($mockRepository);
// টেস্ট করা
$result = $service->getUser(1);
$this->assertEquals('John Doe', $result);
}
এখানে, আমরা UserRepository
ক্লাসের মক অবজেক্ট তৈরি করেছি এবং তার getUser()
মেথডের জন্য প্রত্যাশিত আউটপুট নির্ধারণ করেছি। তারপর, এই মক অবজেক্টটি UserService
ক্লাসে ইনজেক্ট করেছি এবং টেস্ট করেছি।
shouldReceive()
মেথড ব্যবহার করে আপনি মক অবজেক্টের জন্য নির্দিষ্ট মেথড এবং তাদের প্রত্যাশিত আউটপুট সেট করতে পারেন। উদাহরণ:
$mock = Mockery::mock('ClassName');
$mock->shouldReceive('methodName')
->once() // মেথডটি একবার কল হবে
->with('argument') // নির্দিষ্ট আর্গুমেন্ট দিয়ে
->andReturn('result'); // প্রত্যাশিত রেজাল্ট
এখানে, methodName
হল সেই মেথড যা আপনি মক করতে চান, এবং andReturn()
দ্বারা আপনি যে ফলাফল আশা করছেন তা নির্ধারণ করবেন।
লাটাভেলে, আপনি যদি মক অবজেক্টে কোনো মেথড কল না করে থাকেন, তবে mockery
এর never()
ফাংশন ব্যবহার করতে পারেন:
$mock->shouldReceive('methodName')
->never(); // এই মেথডটি কখনোই কল হবে না
এটি নিশ্চিত করে যে মক অবজেক্টে ওই মেথডটি কখনো কল হবে না।
আপনি যখন মক অবজেক্ট তৈরি করেন, তখন তা অ্যাসার্ট (assert) করার মাধ্যমে নিশ্চিত করতে পারেন যে প্রত্যাশিত মেথডগুলি সঠিকভাবে কল হয়েছে।
$mock->shouldReceive('methodName')
->once()
->andReturn('someValue');
// টেস্ট শেষে মক অবজেক্টের প্রত্যাশিত মেথড কল হয়েছে কি না তা পরীক্ষা
$mock->shouldHaveReceived('methodName')->once();
এটি নিশ্চিত করবে যে মক অবজেক্টের methodName
মেথডটি একবার কল হয়েছে।
লারাভেলে, মক অবজেক্ট ব্যবহার করার পর Mockery::close()
ফাংশনটি কল করে ক্লিনআপ করতে হয়।
public function tearDown(): void
{
Mockery::close();
}
এটি নিশ্চিত করবে যে সমস্ত মক অবজেক্ট সঠিকভাবে ক্লিনআপ হয়েছে এবং পরবর্তী টেস্টে কোনো সমস্যা হবে না।
লারাভেল মকিং (Mocking) একটি শক্তিশালী টেস্টিং কৌশল যা আপনাকে নির্দিষ্ট ডিপেনডেন্সি বা ক্লাসের আচরণকে নকল করে টেস্টিং করতে সাহায্য করে। এটি টেস্টিং প্রক্রিয়াকে দ্রুত এবং নির্দিষ্ট করে তোলে, যেখানে আপনি আসল কার্যকলাপের পরিবর্তে মক অবজেক্ট ব্যবহার করতে পারেন। মকিংয়ের মাধ্যমে ডিপেনডেন্সি ইনজেকশন এবং সার্ভিস ক্লাসগুলোর সঠিক কাজের পরীক্ষা করা সহজ হয়, এবং আপনি কোডের নির্দিষ্ট অংশগুলোকে আলাদা করে টেস্ট করতে পারেন।
Read more